package com.luzyluis.medicalcalendar.vista;

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.DatePicker;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;

import com.luzyluis.medicalcalendar.R;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class Agregar extends ActionBarActivity
{

    //Constante para saber en onActivityResult que esa fue la actividad que acaba de terminar
    private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
    public static final int MEDIA_TYPE_IMAGE = 1;

    private Uri fileUri;


    private Spinner spinnerModos;
    ArrayAdapter<CharSequence> adaptador;
    private Button btAgregarFoto, btGuardar;
    private TextView tvCodigo, tvNombre, tvCantidad;
    private CheckBox tomas1, tomas2, tomas3, tomas4, tomas5, tomas6;
    private ImageView foto;
    public static int opcionFecha;
    public static GregorianCalendar fechaIni, fechaFin, fechaMax;
    public static Button btFechaIni, btFechaFin, btFechaMax;
    public String nombreFoto;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_agregar);

        fechaIni = new GregorianCalendar();
        fechaFin = new GregorianCalendar();
        fechaMax = new GregorianCalendar();

        // Instancia del spinner y del adaptador para que lea del array.xml
        adaptador = ArrayAdapter.createFromResource(this,
                R.array.valores_array_modos, android.R.layout.simple_spinner_item);
        spinnerModos = (Spinner) findViewById(R.id.spinnerModos);
        adaptador.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerModos.setAdapter(adaptador);

        spinnerModos.setOnItemSelectedListener(
                new AdapterView.OnItemSelectedListener()
                {
                    public void onItemSelected(AdapterView<?> parent,
                                               android.view.View v, int position, long id)
                    {
                        // lblMensaje.setText("Seleccionado: " + datos[position]);
                    }

                    public void onNothingSelected(AdapterView<?> parent)
                    {
                        //  lblMensaje.setText("");
                    }
                });

        btFechaIni = (Button) findViewById(R.id.btFechaIni);
        btFechaIni.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                opcionFecha = 1;
                showDatePickerDialog(v);
            }
        });

        btFechaFin = (Button) findViewById(R.id.btFechaFin);
        btFechaFin.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                opcionFecha = 2;
                showDatePickerDialog(v);
            }
        });
        btFechaMax = (Button) findViewById(R.id.btFechaMax);
        btFechaMax.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                opcionFecha = 3;
                showDatePickerDialog(v);
            }
        });

        btAgregarFoto = (Button) findViewById(R.id.btAddFoto);
        btAgregarFoto.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View view)
            {
                agregarFoto();
            }
        });

        btGuardar = (Button) findViewById(R.id.btGuardarTrat);
        btGuardar.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View view)
            {
                GuardarDatos();
            }
        });

        tvCodigo = (TextView) findViewById(R.id.tbCodigo);
        tvNombre = (TextView) findViewById(R.id.tbNombre);
        tvCantidad = (TextView) findViewById(R.id.tbCantidad);

        tomas1 = (CheckBox) findViewById(R.id.Tomas1);
        tomas2 = (CheckBox) findViewById(R.id.Tomas2);
        tomas3 = (CheckBox) findViewById(R.id.Tomas3);
        tomas4 = (CheckBox) findViewById(R.id.Tomas4);
        tomas5 = (CheckBox) findViewById(R.id.Tomas5);
        tomas6 = (CheckBox) findViewById(R.id.Tomas6);

        foto = (ImageView) findViewById(R.id.foto);


    }

    private void showDatePickerDialog(View v)
    {
        DialogFragment newFragment = new DatePickerFragment();
        newFragment.show(getSupportFragmentManager(), "datePicker");
    }

    private void GuardarDatos()
    {
        String codigo = tvCodigo.getText().toString();
        String nombre = tvNombre.getText().toString();
        int cantidad = Integer.parseInt(tvCantidad.getText().toString());
        String modo = spinnerModos.getSelectedItem().toString();
        int toma1 = (tomas1.isChecked()) ? 1 : 0;
        int toma2 = (tomas2.isChecked()) ? 1 : 0;
        int toma3 = (tomas3.isChecked()) ? 1 : 0;
        int toma4 = (tomas4.isChecked()) ? 1 : 0;
        int toma5 = (tomas5.isChecked()) ? 1 : 0;
        int toma6 = (tomas6.isChecked()) ? 1 : 0;

        // TODO codigo de fechas y codigo de imagen
        String imagen = foto.toString();


        //  Tratamiento tratamiento = new Tratamientos(codigo, cantidad, modo, tomas1, tomas2, tomas3, tomas4, toma5, tomas6, fechaIni, fechaFin, fechaMax,imagen );
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        boolean retorno = super.onOptionsItemSelected(item);

        //noinspection SimplifiableIfStatement
        switch (id)
        {
            case R.id.action_agregar:
                lanzarActivity(1);
                retorno = true;
                break;
            case R.id.action_listar:
                lanzarActivity(2);
                retorno = true;
                break;
            case R.id.action_calendario:
                lanzarActivity(3);
                retorno = true;
                break;
            case R.id.action_datos:
                lanzarActivity(4);
                retorno = true;
                break;
        }

        return retorno;


    }

    public void lanzarActivity(int key)
    {
        Intent i = null;
        switch (key)
        {
            case 1: // Agregar
                i = new Intent(this, Agregar.class);
                startActivityForResult(i, 1234);
                break;
            case 2: // Tratamientos
                i = new Intent(this, Tratamientos.class);
                startActivity(i);
                break;
            case 3: // Calendario
                i = new Intent(this, Calendario.class);
                startActivity(i);
                break;
            case 4: // Datos
                i = new Intent(this, DatosPersonales.class);
                startActivity(i);
                break;
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (requestCode == 1 && resultCode == RESULT_OK)
        {
            Bitmap bmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + "/MCalFoto/" + nombreFoto);
            foto.setImageBitmap(bmap);
        } else if (resultCode == RESULT_CANCELED)
        {
            // User cancelled the image capture
        } else
        {
            // Image capture failed, advise user
        }

    }

    /**
     * Metodos para la toma de FOTOGRAFIAS
     */
    private void agregarFoto()
    {
        nombreFoto = "foto.jpg";
        // creamos el intent
        Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        // creamos una carpeta para los archivos
        File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MCalFoto");
        imagesFolder.mkdir();
        // añadimos el nombre de la imagen
        File image = new File(imagesFolder, nombreFoto);
        Uri uriSavedImage = Uri.fromFile(image);
        // le decimos al intent que queremos grabar la imagen
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);

        // lanzamos la aplicación de la camara con retorno
        startActivityForResult(cameraIntent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
    }


    /**
     * Clase para la creación del selector de fechas
     */
    public static class DatePickerFragment extends DialogFragment
            implements DatePickerDialog.OnDateSetListener
    {

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState)
        {
            // Use the current date as the default date in the picker
            final Calendar c = Calendar.getInstance();
            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH);
            int day = c.get(Calendar.DAY_OF_MONTH);

            // Create a new instance of DatePickerDialog and return it
            return new DatePickerDialog(getActivity(), this, year, month, day);
        }

        public void onDateSet(DatePicker view, int year, int month, int day)
        {
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MMM/yyyy");
            switch (opcionFecha)
            {
                case 1:
                    fechaIni = new GregorianCalendar(year, month, day);
                    btFechaIni.setText(sdf.format(fechaIni.getTime()));
                    break;
                case 2:
                    fechaFin = new GregorianCalendar(year, month, day);
                    btFechaFin.setText(sdf.format(fechaFin.getTime()));
                    break;
                case 3:
                    fechaMax = new GregorianCalendar(year, month, day);
                    btFechaMax.setText(sdf.format(fechaMax.getTime()));
                    break;
            }

        }
    }


}

